From fd90de672b1ab9404cc508e39f02a21693bb7eac Mon Sep 17 00:00:00 2001 From: Richard Hult Date: Sat, 3 Nov 2007 13:12:45 +0000 Subject: [PATCH] Fix bug #486369, by passing the selection info along when pasting. 2007-11-03 Richard Hult * gtk/gtkclipboard-quartz.c: (clipboard_owner_destroyed), (gtk_clipboard_set_contents), (clipboard_unset): Fix bug #486369, by passing the selection info along when pasting. svn path=/trunk/; revision=18965 --- ChangeLog | 6 ++++++ gtk/gtkclipboard-quartz.c | 39 ++++++++++++++++++++++++++++++++------- 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index dc2785b554..9b8a532c9d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-11-03 Richard Hult + + * gtk/gtkclipboard-quartz.c: (clipboard_owner_destroyed), + (gtk_clipboard_set_contents), (clipboard_unset): Fix bug #486369, + by passing the selection info along when pasting. + 2007-11-03 Richard Hult * gdk/quartz/GdkQuartzWindow.c: diff --git a/gtk/gtkclipboard-quartz.c b/gtk/gtkclipboard-quartz.c index e86feeffa1..24563f2407 100644 --- a/gtk/gtkclipboard-quartz.c +++ b/gtk/gtkclipboard-quartz.c @@ -53,6 +53,7 @@ struct _GtkClipboard GtkClipboardClearFunc clear_func; gpointer user_data; gboolean have_owner; + GtkTargetList *target_list; gboolean have_selection; GdkDisplay *display; @@ -91,18 +92,26 @@ struct _GtkClipboardClass -(void)pasteboard:(NSPasteboard *)sender provideDataForType:(NSString *)type { GtkSelectionData selection_data; + guint info; selection_data.selection = clipboard->selection; selection_data.data = NULL; selection_data.target = _gtk_quartz_pasteboard_type_to_atom (type); - /* FIXME: We need to find out what the info argument should be - * here by storing it in the clipboard object in - * gtk_clipboard_set_contents - */ - clipboard->get_func (clipboard, &selection_data, 0, clipboard->user_data); + if (clipboard->target_list && + gtk_target_list_find (clipboard->target_list, selection_data.target, &info)) + { + clipboard->get_func (clipboard, &selection_data, + info, + clipboard->user_data); + } + else + { + selection_data.length = -1; + } - _gtk_quartz_set_selection_data_for_pasteboard (clipboard->pasteboard, &selection_data); + _gtk_quartz_set_selection_data_for_pasteboard (clipboard->pasteboard, + &selection_data); g_free (selection_data.data); } @@ -326,6 +335,12 @@ clipboard_owner_destroyed (gpointer data) clipboard->user_data = NULL; clipboard->have_owner = FALSE; + if (clipboard->target_list) + { + gtk_target_list_unref (clipboard->target_list); + clipboard->target_list = NULL; + } + gtk_clipboard_clear (clipboard); tmp_list = tmp_list->next; @@ -385,11 +400,15 @@ gtk_clipboard_set_contents (GtkClipboard *clipboard, clipboard->get_func = get_func; clipboard->clear_func = clear_func; + if (clipboard->target_list) + gtk_target_list_unref (clipboard->target_list); + clipboard->target_list = gtk_target_list_new (targets, n_targets); + [clipboard->pasteboard declareTypes:types owner:owner]; [pool release]; - return true; + return TRUE; } /** @@ -521,6 +540,12 @@ clipboard_unset (GtkClipboard *clipboard) if (old_clear_func) old_clear_func (clipboard, old_data); + if (clipboard->target_list) + { + gtk_target_list_unref (clipboard->target_list); + clipboard->target_list = NULL; + } + /* If we've transferred the clipboard data to the manager, * unref the owner */ -- 2.30.2